#include <stdio.h>
#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "Servo.h"
#include "Key.h"
#include "Serial.h"
#include "MoveAlgorithm.h"
#include "Delay.h"

enum LaserColor DeviceLaserColor = GREEN; // 激光的颜色，RED中心为 (25, 25)，GREEN中心为 (75, 25)

uint8_t KeyNum = 0;		//定义用于接收按键键码的变量

void SendNumber(int num)
{
	for(int i = 0; i < 3; i++)
		Serial_SendNumber(num, 1);
}

int main()
{
	Servox_Init();
	Servoy_Init();
	Serial_Init();
	Key_Init();		// 按键初始化
	
	while(1)
	{
		KeyNum = Key_GetNum();		//获取按键键码
		
		const uint8_t KeyMap[5] = {0, 1, 2, 3, 4}; // 定义按键映射表
		const uint8_t MapSize = sizeof(KeyMap) / sizeof(KeyMap[0]);
		
		// 检查按键值是否在有效范围内
		if(KeyNum > 0 && KeyNum < MapSize)
			SendNumber(KeyMap[KeyNum]); // 发送对应按键值
		
		if (Serial_GetRxFlag() == 1)	//如果接收到数据包
		{
			float* NextAngle = MoveAlgorithm(DeviceLaserColor, Serial_RxPacket[0], Serial_RxPacket[1]);
			Servox_SetAngle(NextAngle[0]);			//设置舵机的角度为角度变量
			Servoy_SetAngle(NextAngle[1]);			//设置舵机的角度为角度变量
			Delay_ms(500);
			SendNumber(KeyMap[0]); // 发送对应按键值
			
			free(NextAngle);
		}
	}
}
